package com.justnow.offer;

/**
 * @author justnow
 * Created on 2020-08-13
 * Description
 */
public class Solution16 {
    public double quickMul (double x, long N) {


        if (N == 0) //当N==0的时候，递归返回的条件
            return 1.0;
        double y = quickMul(x, N / 2); //计算的是x^(N/2)的结果
        return N % 2 == 0 ? y * y : y * y * x; //若N为偶数，返回的是 X^(N/2) * X^(N/2)的结果
    }

    public double myPow (double x, int n) {

        //这里将N转换为long型的原因是，
        //当n = -2^31次方时，我们计算的时候就会溢出，此时转换为-n时为2^31，显然超出了最大int的范围，所以，需要
        //转换为长整形
        long N = n;
        return  N >= 0 ? quickMul(x, N) : 1.0 / quickMul(x, -N);
    }
}
